package com.gxc.recursion;

import java.util.PriorityQueue;
import java.util.Scanner;

/**
 * 入职后，导师会请你吃饭，你选择了火锅。
 *
 * 火锅里会在不同时间下很多菜。
 *
 * 不同食材要煮不同的时间，才能变得刚好合适。
 *
 * 你希望吃到最多的刚好合适的菜，但你的手速不够快，用m代表手速，每次下手捞菜后至少要过m秒才能再捞（每次只能捞一个）。
 *
 * 那么用最合理的策略，最多能吃到多少刚好合适的菜？
 *
 * 输入描述
 * 第一行两个整数n，m，其中n代表往锅里下的菜的个数，m代表手速。（1 < n, m < 1000）
 *
 * 接下来有n行，每行有两个数x，y代表第x秒下的菜过y秒才能变得刚好合适。（1 < x, y < 1000）
 *
 * 输出描述
 * 输出一个整数代表用最合理的策略，最多能吃到刚好合适的菜的数量。
 */
public class MostDished {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        for (int i = 0; i < n; i++) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            queue.add(x+y);
        }
        scanner.close();

        int res = 1;
        int curTime = queue.poll();
        while (!queue.isEmpty()) {
            Integer time = queue.poll();
            if (time >= curTime + m) {
                res++;
                curTime = time;
            }
        }
        System.out.println(res);
    }
}
